// "use strict"
/**
 * 选择使用： 'use strict'
 * 这里不用'use strict'， 下面不会报错， 使用了'use strict'后，就会报错。
 * */


/**
 * 变量： 初始化没有给值的变量会报错！
 *
 * */
var a;
console.log(a)


/**
 * 对象： 对象中不能有重复的属性， 否则报语法错误
 * @type {{name: string}}
 */
// 严格模式下
// 重名会报语法错误！
const obj = {
    name: 'ck',
    name:'kb'
}


/**
 * 函数： 函数的参数， 不能重复， 不会报错， 但是通过变量名调用， 只能用到第二个参数
 *
 */

// 严格模式下， 参数不能重复， 如果不是严格模式， 不会抛出异常， 通过参数名只能访问第二个参数。
function sum(num, num) {}


/**
 * eval()方法
 */


/**
 * eval和arguments： 这两个不能声明给变量名， 否则会报错， 不能作为作为变量名称！!!!
 */

const eval = 11;
const arguments = [1, 2, 3]
// 以上在非严格模式下是可以的


/**
 * 抑制this: 在非严格模式下， 使用函数的apply和call方法时候， null、undefined会被转成全局对象
 * 在严格模式下， this始终指向指定的对象。
 */

const color = 'red'
function  displayColor () {
    alert(this.color)
}

displayColor.call(null)


/**
 * 其他变化： 舍弃了with， 也去掉了8进制数据
 */



